package com.xtaller.sdboot.core.base;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

/**
 * @author : Taller
 * @date : 2020/1/14 23:49
 * @Description :
 */
public interface BaseService<T> {
    /**
     * 获取Entity实体
     * @param id 主键
     * @return entity
     */
    T get(Serializable id);
    Object get(Serializable id, Class clz);
    T get(Wrapper<T> wrapper);
    /**
     * 获取指定条件的Entity集合
     * @param ids
     * @return
     */
    List<T> getByIds(List ids);
    /**
     * 创建Entity实体
     * @param entity
     * @return true:成功, false:失败
     */
    boolean create(T entity);
    /***
     * 创建或更新entity（entity.id存在则新建，否则更新）
     * @param entity
     * @return
     */
    boolean model(T entity);
    /**
     * 批量创建或更新entity（entity.id存在则新建，否则更新）
     * @param entityList
     * @return
     */
    boolean model(Collection entityList);
    /**
     * 更新Entity实体
     * @param entity
     * @return
     */
    boolean update(T entity);
    /**
     * 更新Entity实体（更新符合条件的所有非空字段）
     * @param entity
     * @param updateCriteria
     * @return
     */
    boolean update(T entity, Wrapper<T> updateCriteria);
    /**
     * 更新Entity实体（仅更新updateWrapper.set指定的字段）
     * @param updateWrapper
     * @return
     */
    boolean update(Wrapper updateWrapper);
    /**
     * 根据主键删除实体
     * @param id 主键
     * @return true:成功, false:失败
     */
    boolean delete(Serializable id);

    /**
     * 按条件删除实体
     * @param queryWrapper
     * @return
     * @throws Exception
     */
    boolean delete(Wrapper queryWrapper);
    /**
     * 获取指定条件的Entity集合
     * @param queryWrapper
     * @return
     * @throws Exception
     */
    List<T> getList(Wrapper queryWrapper);

    IPage<T> pages(IPage<T> page, Wrapper<T> qw);
    IPage<T> pages(IPage<T> page);
}
